草庐IT

c++ - Visual C++ volatile

全部标签

c - 为什么这个内联汇编不能为每条指令使用单独的 asm volatile 语句?

对于以下代码:longbuf[64];registerlongrraxasm("rax");registerlongrrbxasm("rbx");registerlongrrsiasm("rsi");rrax=0x34;rrbx=0x39;__asm____volatile__("movq$buf,%rsi");__asm____volatile__("movq%rax,0(%rsi);");__asm____volatile__("movq%rbx,8(%rsi);");printf("buf[0]=%lx,buf[1]=%lx!\n",buf[0],buf[1]);我得到以下输出:

c - 如何在 CentOS Linux 上检查 GPU

建议在Linux上使用命令lspci|找到GPU。grepVGA。它在Ubuntu上运行良好,但是当我尝试在CentOS上使用它时,它说找不到lspci命令。如何在CentOS上检查GPU卡。请注意,我不是机器的管理员,我只是从命令行远程使用它。我打算在那台机器上将GPU用作GPGPU,但首先我需要检查它是否有一个GPGPU。 最佳答案 这假设您安装了专有驱动程序,但发出以下命令...nvidia-smi输出应该类似于这样:MonDec2310:50:282013+----------------------------------

c - 如何在 CentOS Linux 上检查 GPU

建议在Linux上使用命令lspci|找到GPU。grepVGA。它在Ubuntu上运行良好,但是当我尝试在CentOS上使用它时,它说找不到lspci命令。如何在CentOS上检查GPU卡。请注意,我不是机器的管理员,我只是从命令行远程使用它。我打算在那台机器上将GPU用作GPGPU,但首先我需要检查它是否有一个GPGPU。 最佳答案 这假设您安装了专有驱动程序,但发出以下命令...nvidia-smi输出应该类似于这样:MonDec2310:50:282013+----------------------------------

c - 关于 setjmp/longjmp

我正在调查setjmp/longjmp,发现setjmp保存指令指针、堆栈指针等寄存器...然而,我在这里没有得到的是,在调用setjmp和longjmp之间,不能修改线程本身堆栈中的数据。在那种情况下,longjmp不会按预期工作。说清楚,比如longjmp恢复栈指针的时候,说栈指针现在指向的内存中的数据和setjmp被称为。这会发生吗?如果发生这种情况,我们不是有麻烦了吗?还有语句的含义,“在调用setjmp()例程的例程返回后可能不会调用longjmp()例程。” 最佳答案 堆栈指针标记了堆栈“已使用”和“未使用”部分之间的划

c - 关于 setjmp/longjmp

我正在调查setjmp/longjmp,发现setjmp保存指令指针、堆栈指针等寄存器...然而,我在这里没有得到的是,在调用setjmp和longjmp之间,不能修改线程本身堆栈中的数据。在那种情况下,longjmp不会按预期工作。说清楚,比如longjmp恢复栈指针的时候,说栈指针现在指向的内存中的数据和setjmp被称为。这会发生吗?如果发生这种情况,我们不是有麻烦了吗?还有语句的含义,“在调用setjmp()例程的例程返回后可能不会调用longjmp()例程。” 最佳答案 堆栈指针标记了堆栈“已使用”和“未使用”部分之间的划

c - 什么构成异步安全

据说您应该只在信号处理程序中调用异步安全函数。我的问题是,什么构成了异步安全?我猜一个既可重入又线程安全的函数是异步安全?还是不? 最佳答案 重入和线程安全与此关系不大或无关。这些功能的副作用、状态和中断是重要的事实。asynchronous-safefunction[GNUPth]Afunctionisasynchronous-safe,orasynchronous-signalsafe,ifitcanbecalledsafelyandwithoutsideeffectsfromwithinasignalhandlercontex

c - 什么构成异步安全

据说您应该只在信号处理程序中调用异步安全函数。我的问题是,什么构成了异步安全?我猜一个既可重入又线程安全的函数是异步安全?还是不? 最佳答案 重入和线程安全与此关系不大或无关。这些功能的副作用、状态和中断是重要的事实。asynchronous-safefunction[GNUPth]Afunctionisasynchronous-safe,orasynchronous-signalsafe,ifitcanbecalledsafelyandwithoutsideeffectsfromwithinasignalhandlercontex

c - 正确使用 volatile sig_atomic_t

根据this站点,可以使用volatilesig_atomic_t类型的变量在信号处理程序中。现在我的问题是,例如下面的代码仍然是原子的,因此不会引入竞争条件吗?假设我们正在使用多核处理器(编辑:运行多线程程序)。是否volatilesig_atomic_t甚至首先为多核系统工作,还是我们应该使用atomic多核系统上用于信号处理程序的C++11(编辑:运行多线程程序)?volatilesig_atomic_ta;staticvoidsignal_handler(intsig,siginfo_t*si,void*unused){intb;................b=...;a=

c - 正确使用 volatile sig_atomic_t

根据this站点,可以使用volatilesig_atomic_t类型的变量在信号处理程序中。现在我的问题是,例如下面的代码仍然是原子的,因此不会引入竞争条件吗?假设我们正在使用多核处理器(编辑:运行多线程程序)。是否volatilesig_atomic_t甚至首先为多核系统工作,还是我们应该使用atomic多核系统上用于信号处理程序的C++11(编辑:运行多线程程序)?volatilesig_atomic_ta;staticvoidsignal_handler(intsig,siginfo_t*si,void*unused){intb;................b=...;a=

c - Linux asm ("int $0x0") 与除以零

有人能解释一下汇编指令int$0x00和实际除以零之间的区别吗?我在与IDT中的第0个条目(除法错误)关联的内核中的divide_error()处理程序上设置了一个断点。当我在我的C程序中执行此操作时:inti=5/0;然后我到达了断点(如预期的那样)。然而,asmvolatile("int$0x00")不触发处理程序。为什么? 最佳答案 int0h与CPU由于除以零而生成陷阱0不同。这articleofPhrack很好地解释了IDT以及Linux如何设置它。关键部分是:DPL=DescriptorPrivilegeLevelThe